package lg.iu;

import wolf.iu.framework.hooks.AbstractClassHookEnum;
import wolf.iu.framework.hooks.AbstractFieldHookEnum;

import static lg.iu.FieldHooks.*;

public enum ClassHooks implements AbstractClassHookEnum {
    
    Client (LocalPlayer, BaseX, BaseY, GetWorld, MyCountry, GEItems, MyPlayerRights,
            GetItemDefLoader, GameState, GetIFaceCache, GetSettingData, GetTileData,
            GetMinimapSetting, GetMinimapAngle, GetSkillExperiences, GetSkillLevels,
            GetSkillLevelsMaxes, GetCamPosX, GetCamPosY, GetCamPosZ, GetChatLines,
            IsMenuCollapsed, GetMenuItems, GetCollapsedMenuItems, GetCallBack,
            GetCanvas, GetCameraPitch, GetCameraYaw, GetCurrentUsername, GetDestX,
            GetDestY, GetDetailInfoNode, GetGroundByteArray, GetGUIInterfaceIndex,
            GetIdleTime, GetKeyboard, GetMenuOptionsCount, GetMenuX, GetMenuY,
            GetCurrentMenuGroupNode, GetSubMenuX, GetSubMenuY, GetSubMenuWidth,
            GetMinimapOffset, GetMinimapScale, GetMouse, GetPlane, GetPublicChatMode,
            GetGroundArray, GetGroundDataArray, GetInteractingDefList,
            GetInterfaceBoundsArray, GetInterfaceNC, GetItemHashTable, GetNpcNC,
            GetNPCCount, GetNPCIndexArray, GetPlayerArray, GetPlayerCount,
            GetPlayerIndexArray, GetSelectedItemName, GetSelfInteracting, GetSignLink,
            GetSkillExperiencesMaxes, GetValidInterfaceArray, IsFlagged, /*originally isitemselected but its an int*/GetItemSelected,
            IsMenuOpen, IsSpellSelected, GetObjectDefLoader, GetInteractableDefListLoader,
            GetWorldData /* TODO setCallback? */, GETCURVESIN, GETCURVECOS),
    Player (GetPlayerDef),
    PlayerDef,
    Character (LocalX, LocalY),
    Mobile,
    Animable (Plane, AnimableX, AnimableY),
    AnimableList (GetNextAnimableNode, GetCurrentAnimable),
    World (WorldId),
    Model,
    ItemDefLoader,
    ItemDef,
    ClientScript,
    TileData (GetHeights),
    SettingData (GetData),
    Mouse,
    Keyboard,
    GEItem (GEItemId, Price, Total, Transfered, Spent),
    Interface (Width, Height, IsHidden, HScroll, MaxHScroll, MinHScroll, VScroll, MaxVScroll,
            MinVScroll, TextColor, TextureId, ModelType, ModelId, ModelRotationX, ModelRotationY,
            ModelRotationZ, ModelZoom, Text , IsInventoryInterface,
            BorderThickness, ShadowColor, FlippedVertically, FlippedHorizontally, ItemName,
            SelectedActionName, ItemActions, InventoryX, InventoryY, ParentId,
            ItemId, ItemStackSize, ItemIndex);
    
    private final AbstractFieldHookEnum[] fieldHooks;
    
    ClassHooks(final AbstractFieldHookEnum... fieldHooks) {
        this.fieldHooks = fieldHooks;
    }

    @Override
    public String getName() {
        return this.name();
    }

    @Override
    public AbstractFieldHookEnum[] fieldHooks() {
        return this.fieldHooks;
    }

}
